﻿using Soa32.Zanfranceschi.Comum.Modelo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Text;

namespace Soa32.Zanfranceschi.ServicosWeb.Servidor
{
	class ServidorServicoWeb
	{
		[ServiceContract]
		public interface IServico
		{
			[OperationContract]
			void EnviarComando(Entidade entidade, string instrucao);

			[OperationContract]
			Entidade ObterResposta(string texto);
		}

		public class Servico
			: IServico
		{
			public void EnviarComando(Entidade entidade, string instrucao)
			{
				//Console.WriteLine("{0} - Comando recebido: {1}", DateTime.Now, instrucao);
			}

			public Entidade ObterResposta(string texto)
			{
				//Console.WriteLine("{0} - Requisição recebida: {1}", DateTime.Now);
				return new Entidade { Texto = texto, Valor = 1, DataHora = DateTime.Now };
			}
		}

		class Program
		{
			static void Main(string[] args)
			{
				Console.Title = "Servidor Serviços Web";
				Console.WindowHeight = 10;
				Console.WindowWidth = 60;

				Uri baseAddress = new Uri("http://localhost:8080/servico");

				using (ServiceHost host = new ServiceHost(typeof(Servico), baseAddress))
				{
					ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
					smb.HttpGetEnabled = true;
					smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
					host.Description.Behaviors.Add(smb);
					host.Open();
					Console.WriteLine("Serviço executando em  {0}", baseAddress);
					Console.WriteLine("Pressione qualquer tecla para sair.");
					Console.ReadLine();
					host.Close();
				}
			}
		}
	}
}
